package nige.mesure.ecran;

import java.awt.Color;
import java.util.Random;
import java.util.Vector;

import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * Fenetre de log principale
 * @author Nicolas Genevaux
 * (c) nige 2008
 */
public class LogPrincipale {
	/**
	 * log principal, appel de add() par la suite
	 * pour l'ajout de log dans la fenetre
	 */
	private static LogPrincipale log = null;
	/**
	 * Panel de la fenetre de log principal
	 */
	private JPanel logPrincipale = null;
	/**
	 * Vecteur contenant tous les messages
	 */
	private Vector<Logs> messages = new Vector<Logs>();
	/**
	 * Constructeur de la classe
	 * @param jpa Panel pour le dessin de la log
	 */
	public LogPrincipale(JPanel jpa) {
		logPrincipale = jpa;
	}
	/**
	 * Ajout de log
	 * Seul cette fonction devrait etre appele une fois 
	 * la fenetre construite
	 * @param message Message a passer
	 * @param urgence Urgence du message 
	 * 		0 : Info
	 * 		1 : Warning
	 * 		2 : Error
	 */
	public static void add(String message,int urgence) {
		Random rand = new Random();
		message = "#"+rand.nextInt(10)+" : "+message;
		log.logPrincipale.removeAll();
		log.messages.add(new Logs(message,urgence));
		if(log.messages.size()>10) {
			log.messages.remove(0);
		}
		for(int i=0;i<log.messages.size();i++) {
			JLabel logs = new JLabel(log.messages.get(i).MESSAGE);
			logs.setForeground(getColor(log.messages.get(i).URGENCE));
			logs.setBounds(10,20*(log.messages.size()-i-1),3000,20);
			log.logPrincipale.add(logs);
		}
		log.logPrincipale.repaint();
	}
	/**
	 * Ajout de log
	 * Seul cette fonction devrait etre appele une fois 
	 * la fenetre construite
	 * @param message Message a passer
	 * @param urgence Urgence du message 
	 * 		0 : Info
	 * 		1 : Warning
	 * 		2 : Error
	 */
	public static void replace(String message,int urgence) {
		message = "## : "+message;
		log.logPrincipale.removeAll();
		log.messages.set(log.messages.size()-1,new Logs(message,urgence));
		for(int i=0;i<log.messages.size();i++) {
			JLabel logs = new JLabel(log.messages.get(i).MESSAGE);
			logs.setForeground(getColor(log.messages.get(i).URGENCE));
			logs.setBounds(10,20*(log.messages.size()-i-1),3000,20);
			log.logPrincipale.add(logs);
		}
		log.logPrincipale.repaint();
	}
	/**
	 * Dessine la fenetre
	 */
	public void dessine() {
		logPrincipale.setBackground(Color.white);
		logPrincipale.setLayout(null);
		LogPrincipale.log = this;
		LogPrincipale.add("Demarrage de l'application",0);
		LogPrincipale.add("Atttente...",0);
	}
	/**
	 * Renvoie la couleur correspondant  a l'urgence
	 * @param urgence (0-1-2)
	 * @return la couleur correspondante
	 */
	public static Color getColor(int urgence) {
		switch (urgence) {
		case 0:
			return Color.green;
		case 1:
			return Color.orange;
		case 2:
			return Color.red;
		default:
			return Color.black;
		}
	}
}
/**
 * Mini classe pour la log
 * @author Nicolas Genevaux
 *
 */
class Logs {
	/**
	 * Message
	 */
	public String MESSAGE = "";
	/**
	 * Urgence
	 */
	public int URGENCE = 0;
	/**
	 * Constructeur de la classe
	 * @param mess Message
	 * @param urg Urgence
	 */
	public Logs(String mess,int urg) {
		MESSAGE = mess;
		URGENCE = urg;
	}
}
